package com.sczmgk.track.db.base;

import java.io.Serializable;
import java.util.List;

/**
 * 公共的接口
 */
public interface DAO <M> {

    /**
     * 加入数据
     * @param m
     * @return
     */
    long insert(M m);

    /**
     * 根据id删除数据
     * @param id
     * @return
     */
    int delete(Serializable id);//通用
    /**
     * 根据id删除数据
     * @return
     */
    int deleteAll();//通用

    /**
     * 更新数据
     * @param m
     * @return
     */
    int updata(M m);

    /**
     * 查询所有
     * @return
     */
    List<M> findAll();

    /**
     * 根据 id查询
     * @param id
     * @return
     */
    M findById(Serializable id);
    /**
     * 根据有注解的查询字段查询List
     * @param value
     * @return
     */
    List<M> findListByQuery(Serializable value);

    /**
     * 根据有注解的查询字段查询
     * @param value
     * @return
     */
    M findByQuery(Serializable value);
    /**
     * 查询是否存在
     * @param value
     * @return
     */
    boolean isExists(Serializable value);

    /**
     * 取得数据的条数
     *
     * @param value  查询字段
     * @return
     */
    int getCountByQuery(Serializable value);

    /**
     * 分页加载数据
     * @param value
     * @param startIndex
     * @param maxNumber
     * @return
     */
    List<M> findByLimit(Serializable value, Serializable startIndex, Serializable maxNumber);

    List<M> findLastData(Serializable value);

    /**
     * 取得数据总数
     * @return
     */
    int getCount();
}

